iT邦幫忙

2026 iThome 鐵人賽

DAY 14
0
自我挑戰組

用數據守護雙眼:生活型態對視力影響的探索性資料分析系列 第 14 篇

視力警訊大盤點!出現「視力模糊」的受試者具備哪些危險特徵?

  • 分享至 

  • xImage
  •  

聚焦於資料集中最具臨床指標性的急性眼部警訊 —— 視力模糊,分析出現模糊症狀的受試者(155 人,31.0%)在「年齡」、「螢幕時長」、「每週頭痛頻率」及「綜合用眼疲勞風險等級(Digital_Eye_Strain_Risk)」上的特徵輪廓與危險暴露型態。

一、實作前情境:眼睛乾澀可以忍,視力模糊是身體拉警報!
在先前的分析中,我們探討了「主觀評分」的乾澀與眼痛(0~10分)。但主觀分數容易受到個人耐受度影響,而 Blurred_Vision則是一個明確的二元客觀症狀(Yes/No):

  • 未出現模糊(No):345人(69.0%)
  • 已出現模糊(Yes):155人(31.0%)
    在醫學臨床上,長時間注視螢幕後引發的暫時性視力模糊,往往代表睫狀肌處於高度痙攣痙攣狀態、調節力暫時失調,甚至伴隨嚴重乾眼造成的角膜表面不平整。這近三分之一(155人)的受試者已經跨過了單純疲勞的界線,出現了實質視能影響!今天我們就來深度拆解:到底是哪些生活型態指標(更長工時?更高頻率頭痛?更高年齡?),在背後推動著視力模糊的發生?

二、撰寫視力模糊受試者特徵剖析腳本
在Colab中新增儲存格,使用 warnings.filterwarnings('ignore') 確保輸出乾淨,並建立多維度對比圖表與統計表格:

# ==========================================
# Day 14:視力模糊 (Blurred_Vision) 特徵輪廓分析
# ==========================================

import warnings
warnings.filterwarnings('ignore') # 保持終端輸出乾淨

import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.font_manager as fm
import pandas as pd

# 1. 確保引用中文字型
font_path = 'NotoSansTC-Regular.otf'
my_font = fm.FontProperties(fname=font_path)

# 2. 建立 1x2 畫布佈局
fig, axes = plt.subplots(1, 2, figsize=(16, 6))
sns.set_theme(style="whitegrid")

# 調色盤設定:未模糊 (No) 使用淺冷灰,出現模糊 (Yes) 使用警示橘紅
blur_palette = {'No': '#95a5a6', 'Yes': '#e67e22'}
blur_order = ['No', 'Yes']

# --- 圖 1:視力模糊 vs. 伴隨症狀 (每週頭痛頻率) 分組箱形圖 ---
sns.boxplot(
    data=df,
    x='Blurred_Vision',
    y='Headache_Frequency_Per_Week',
    hue='Blurred_Vision',
    order=blur_order,
    palette=blur_palette,
    legend=False,
    width=0.45,
    boxprops=dict(alpha=0.8),
    ax=axes[0]
)
axes[0].set_title('視力模糊 vs. 每週頭痛頻率分佈', fontproperties=my_font, fontsize=14, fontweight='bold')
axes[0].set_xlabel('是否出現視力模糊 (Blurred_Vision)', fontproperties=my_font, fontsize=12)
axes[0].set_ylabel('每週頭痛次數(次/週)', fontproperties=my_font, fontsize=12)
axes[0].set_xticks([0, 1])
axes[0].set_xticklabels(['未出現 (No)', '出現模糊 (Yes)'], fontproperties=my_font, fontsize=11)

# --- 圖 2:視力模糊族群的疲勞風險等級 (Digital_Eye_Strain_Risk) 佔比 ---
risk_order = ['Low', 'Medium', 'High']
risk_crosstab_blur = pd.crosstab(
    df['Blurred_Vision'], 
    df['Digital_Eye_Strain_Risk'], 
    normalize='index'
)[risk_order] * 100

risk_colors = ['#5dade2', '#f4d03f', '#e74c3c'] # 低風險藍、中風險黃、高風險紅
risk_crosstab_blur.plot(
    kind='bar',
    stacked=True,
    color=risk_colors,
    ax=axes[1],
    width=0.45,
    edgecolor='white'
)
axes[1].set_title('視力模糊狀態 vs. 用眼疲勞風險分級佔比', fontproperties=my_font, fontsize=14, fontweight='bold')
axes[1].set_xlabel('是否出現視力模糊 (Blurred_Vision)', fontproperties=my_font, fontsize=12)
axes[1].set_ylabel('族群內佔比百分比 (%)', fontproperties=my_font, fontsize=12)
axes[1].set_xticks([0, 1])
axes[1].set_xticklabels(['未出現 (No)', '出現模糊 (Yes)'], fontproperties=my_font, rotation=0, fontsize=11)
axes[1].set_ylim(0, 100)

# 設定右圖圖例字型
legend_1 = axes[1].legend(
    title='疲勞風險等級', 
    labels=['低度風險 (Low)', '中度風險 (Medium)', '高度風險 (High)'], 
    loc='upper right'
)
plt.setp(legend_1.get_texts(), fontproperties=my_font)
plt.setp(legend_1.get_title(), fontproperties=my_font)

plt.tight_layout()
plt.show()

# 3. 輸出兩組受試者在各項核心生理與生活指標上的平均值對照表
print("=== 視力模糊組 (Yes) vs. 正常組 (No) 核心指標詳細對比 ===")
blur_comparison = df.groupby('Blurred_Vision').agg(
    受試人數=('Age', 'count'),
    平均年齡=('Age', 'mean'),
    平均每日螢幕時數=('Daily_Screen_Hours', 'mean'),
    平均每日睡眠時數=('Sleep_Hours', 'mean'),
    平均每小時休息次數=('Break_Frequency_Per_Hour', 'mean'),
    平均每週頭痛次數=('Headache_Frequency_Per_Week', 'mean'),
    平均乾澀評分=('Eye_Dryness_Level', 'mean'),
    平均眼痛評分=('Eye_Pain_Level', 'mean')
).reset_index()

display(blur_comparison.round(2))

print("\n=== 視力模糊狀態與風險等級交叉百分比表 (%) ===")
display(risk_crosstab_blur.round(1))

https://ithelp.ithome.com.tw/upload/images/20260928/20178794dv1UCVdWTp.png
https://ithelp.ithome.com.tw/upload/images/20260928/20178794ljVm1LttSp.png

三、圖表解讀與客觀數據分析
結合分組箱形圖、風險堆疊長條圖與指標均值對照表,可得出具備高度醫學與數據價值的核心洞察:

1.綜合疲勞風險等級(Risk Level):視力模糊是跨入「高風險」的關鍵分水嶺
(a)交叉百分比數據:

  • 正常組(No,345 人):低度風險佔 24.6%、中度風險佔 48.7%、高度風險僅佔 26.7%。
  • 模糊組(Yes,155 人):低度風險降至 21.3%、中度風險降至 43.2%、高度風險大幅飆升至 35.5%!

(b)深度洞察:

  • 右側堆疊長條圖中,出現模糊組的紅色高風險區塊顯著擴大,高風險比例淨增加了 8.8 個百分點。
  • 這證實了在數位眼疲勞的綜合評估中,「視力模糊」並非單純的不適感,而是睫狀肌調節疲乏甚至失調的具體警訊,成為將受試者推向「高度風險(High Risk)」的最關鍵生理特徵之一。

2.自覺症狀分佈:眼痛顯著加劇,乾澀反呈微幅分流
(a)眼痛程度(Eye_Pain_Level):

  • 正常組平均眼痛為4.97分,而出現視力模糊組上升至5.34分(上升0.37分)。
  • 這反映出睫狀肌持續性痙攣往往與眼球深層脹痛高度共伴,兩者在神經性疲勞表現上呈現同步加劇的趨勢。

(b)乾澀程度(Eye_Dryness_Level):

  • 模糊組平均乾澀為4.55分,反而略低於正常組的4.79分。
  • 這說明部分受試者出現短暫視力模糊,並非全由眼球表面淚膜破裂乾燥所致,更有可能是長時間注視螢幕引發的單純調節痙攣。

3.每週頭痛頻率與日常暴露基線:指標高度重疊與臨床反思
(a)每週頭痛次數(Headache_Frequency_Per_Week):

  • 左圖箱形圖中,兩組的中位數皆為3.0次/週,箱體下緣(Q1=1次)與上緣(Q3=5次)以及上下鬚線(0~7次)完全一致,平均值也落在3.23與3.33次。
  • 兩組在頭痛次數上並未呈現肉眼可見的差距,顯示在整體樣本中,神經性頭痛的觸發原因可能受到生活壓力、睡眠等多重因子干擾,不完全與視力模糊單向綁定。

(b)暴露與作息基線:

  • 兩組在平均年齡(31.00 vs 30.77歲)、每日螢幕時數(8.10 vs 8.14小時)、每日睡眠時數(6.42 vs 6.43 小時)及每小時休息次數(1.47 vs 1.50次)幾乎完全一致。
  • 工程反思:在相同的日常螢幕暴露與生活作息下,部分人會出現視力模糊而其他人不會,這暗示了個人屈光度數(如近視/散光未足度矯正)、眨眼品質或體質差異可能是尚未被原始欄位完整記錄的潛在隱藏因子。

這段分析明確將 Blurred_Vision 定位為綜合風險的核心預警因子,為單變數與雙變數的探索畫下了極為紮實的句點!


上一篇
多變數交互作用!睡眠不足是否會加劇高螢幕暴露的眼部不適?
下一篇
特徵工程實戰:打造「綜合用眼疲勞指數(CESI)」
系列文
用數據守護雙眼:生活型態對視力影響的探索性資料分析 共 16 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言